﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLVatTu.Class;
using System.Globalization;

namespace QLVatTu.NghiepVu
{
    public partial class frmDuTruVatTu : Form
    {
        KetNoiDB cn = new KetNoiDB();
        public string MaPhieuDuTru = "";

        public frmDuTruVatTu()
        {
            InitializeComponent();
        }

        private void loadData()
        {
            cbbCongTrinhDuAn.DataSource = cn.getTable("select * from tbl_CongTrinhDuAn");
            cbbCongTrinhDuAn.DisplayMember = "TenCongTrinhDuAn";
            cbbCongTrinhDuAn.ValueMember = "MaCongTrinhDuAn";

            VatTu.DataSource = cn.getTable("select * from tbl_VatTu");
            VatTu.DisplayMember = "TenVatTu";
            VatTu.ValueMember = "MaVatTu";

            cbbTrangThai.DataSource = cn.CreateTrangThai();
            cbbTrangThai.DisplayMember = "TenTrangThai";
            cbbTrangThai.ValueMember = "TrangThai";

            if (MaPhieuDuTru == "")
            {
                //Thêm
                txtSoPhieu.Text = cn.SinhMa("SoPhieu", "tbl_PhieuDuTru", "DT");
            }
            else
            {
                //Sửa
                btnLuu.Enabled = true;

                //Load thông tin phiếu dự trù
                string sql = "select * from tbl_PhieuDuTru where SoPhieu='" + MaPhieuDuTru + "'";
                DataTable tbl = cn.getTable(sql);
                if (tbl.Rows.Count > 0)
                {
                    txtSoPhieu.Text = tbl.Rows[0]["SoPhieu"].ToString();
                    cbbCongTrinhDuAn.SelectedValue = tbl.Rows[0]["MaCongTrinhDuAn"].ToString();
                    dtipNgayYeuCau.Value = DateTime.Parse(tbl.Rows[0]["NgayDuTru"].ToString());
                    cbbTrangThai.SelectedValue=tbl.Rows[0]["TrangThai"].ToString();
                }

                //load dgvChiTiet
                sql = @"SELECT     dbo.tbl_ChiTietPhieuDuTru.MaVatTu, dbo.tbl_DonViTinh.TenDonViTinh, dbo.tbl_ChiTietPhieuDuTru.SoLuong
                        FROM         dbo.tbl_DonViTinh INNER JOIN
                                              dbo.tbl_ChiTietPhieuDuTru ON dbo.tbl_DonViTinh.MaDonViTinh = dbo.tbl_ChiTietPhieuDuTru.MaDonViTinh
                        WHERE     dbo.tbl_ChiTietPhieuDuTru.SoPhieu = '" + MaPhieuDuTru + "'";
                DataTable dataChiTiet = cn.getTable(sql);
                if (dataChiTiet.Rows.Count > 0)
                {
                    dtgChiTiet.Rows.Clear();
                    foreach (DataRow dr in dataChiTiet.Rows)
                    {
                        DataGridViewRow dgvr = (DataGridViewRow)dtgChiTiet.Rows[0].Clone();
                        dgvr.Cells[1].Value = dr["MaVatTu"].ToString();
                        dgvr.Cells[2].Value = dr["TenDonViTinh"].ToString();
                        dgvr.Cells[3].Value = dr["SoLuong"].ToString();
                        dtgChiTiet.Rows.Add(dgvr);
                    }
                }
            }
        }

        private void frmDuTruVatTu_Load(object sender, EventArgs e)
        {
            if (cn.KetNoi())
            {
                loadData();
            }
        }

        private void dtgChiTiet_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            if (dtgChiTiet.RowCount > 0 && e.RowIndex != -1)
            {
                btnLuu.Enabled = true;
                string sql = "";
                if (e.ColumnIndex == 1 && dtgChiTiet.Rows[e.RowIndex].Cells[1].Value != null)
                {
                    sql = @"SELECT     dbo.tbl_DonViTinh.TenDonViTinh
                            FROM         dbo.tbl_DonViTinh INNER JOIN
                                                  dbo.tbl_VatTu ON dbo.tbl_DonViTinh.MaDonViTinh = dbo.tbl_VatTu.MaDonViTinh
                            WHERE     dbo.tbl_VatTu.MaVatTu ='" + dtgChiTiet.Rows[e.RowIndex].Cells[1].Value.ToString() + "'";
                    DataGridViewTextBoxCell TenDonViTinh = (DataGridViewTextBoxCell)dtgChiTiet.Rows[e.RowIndex].Cells[2];
                    TenDonViTinh.Value = cn.LayDuLieu(sql);

                    foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
                    {
                        if (dgvr.IsNewRow) continue;

                        if (dgvr.Index != e.RowIndex && dgvr.Cells[1].Value != null && dgvr.Cells[1].Value.ToString() == dtgChiTiet.Rows[e.RowIndex].Cells[1].Value.ToString())
                        {
                            dtgChiTiet.Rows[e.RowIndex].Cells[1].ErrorText = "Lỗi: " + dtgChiTiet.Columns[1].HeaderText + " đã được chọn";
                            dgvr.Cells[1].ErrorText = "Lỗi: " + dtgChiTiet.Columns[1].HeaderText + " đã được chọn";
                        }
                        else
                        {
                            dgvr.Cells[1].ErrorText = "";
                            dtgChiTiet.Rows[e.RowIndex].Cells[1].ErrorText = "";
                        }
                    }
                }
            }
            else
            {
                btnLuu.Enabled = false;
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            if (TopLevel == false) this.Parent.Parent.Controls.Remove(this.Parent);
            else this.Close();
        }

        private bool kiem_tra_lap_vat_tu(int rowIndex)
        {
            foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
            {
                if (dgvr.IsNewRow) continue;

                if (dgvr.Index != rowIndex && dgvr.Cells[1].Value != null && dgvr.Cells[1].Value.ToString() == dtgChiTiet.Rows[rowIndex].Cells[1].Value.ToString())
                {
                    dgvr.Cells[1].ErrorText = "Lỗi: " + dtgChiTiet.Columns[1].HeaderText + " đã được chọn ";
                    dtgChiTiet.Rows[rowIndex].Cells[1].ErrorText = "Lỗi: " + dtgChiTiet.Columns[1].HeaderText + " đã được chọn ";
                    return false;
                }
                else
                {
                    dgvr.Cells[1].ErrorText = "";
                    dtgChiTiet.Rows[rowIndex].Cells[1].ErrorText = "";
                }
            }
            return true;
        }

        private bool IsValid()
        {
            bool kt = true;

            if (dtgChiTiet.Rows.Count == 1 && dtgChiTiet.Rows[0].IsNewRow)
            {
                MessageBox.Show("Bạn chưa chọn vật tư.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dtgChiTiet.Focus();
                kt = false;
            }

            else if (dtipNgayYeuCau.Value > DateTime.Now)
            {
                MessageBox.Show("Ngày dự trù không được lớn hơn ngày hiện tại","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Error);
                dtipNgayYeuCau.Focus();
                kt = false;
            }

            foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
            {
                if (dgvr.IsNewRow) continue;
                if (kiem_tra_lap_vat_tu(dgvr.Index) == false)
                {
                    kt = false;
                }

                if (dgvr.Cells["VatTu"].Value == null)
                {
                    dgvr.Cells["VatTu"].ErrorText = "Lỗi: " + dtgChiTiet.Columns[dgvr.Cells["VatTu"].ColumnIndex].HeaderText + " chưa được chọn ";
                    kt = false;
                }
                else
                {
                    dgvr.Cells["VatTu"].ErrorText = "";
                    if (dgvr.Cells["DonViTinh"].Value == null)
                    {
                        dgvr.Cells["DonViTinh"].ErrorText = "Lỗi: " + dtgChiTiet.Columns[dgvr.Cells["DonViTinh"].ColumnIndex].HeaderText + " chưa được chọn ";
                        kt = false;
                    }
                    else
                    {
                        dgvr.Cells["DonViTinh"].ErrorText = "";
                    }
                }

                string strSoLuong = "";
                double SoLuong = 0;

                if (dgvr.Cells["Soluong"].Value == null)
                {
                    dgvr.Cells["Soluong"].ErrorText = "Lỗi: " + dtgChiTiet.Columns[dgvr.Cells["Soluong"].ColumnIndex].HeaderText + " chưa được nhập";
                    kt = false;
                }
                else 
                {
                    dgvr.Cells["SoLuong"].ErrorText="";
                    if (dgvr.Cells["SoLuong"].Value.ToString().Contains(','))
                        {
                            strSoLuong = dgvr.Cells["SoLuong"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strSoLuong = dgvr.Cells["SoLuong"].Value.ToString();
                        }
                        double.TryParse(strSoLuong, out SoLuong);
                    
                        if (SoLuong <= 0)
                        {
                            dgvr.Cells["Soluong"].ErrorText = "Lỗi: " + dtgChiTiet.Columns[dgvr.Cells["Soluong"].ColumnIndex].HeaderText + " không được nhỏ hơn hoặc bằng 0 và phải là số.";
                            kt = false;
                        }
                        else
                        {
                                dgvr.Cells["Soluong"].ErrorText = "";
                        }
                }
            }
            return kt;
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (IsValid())
            {
                string SoPhieu = txtSoPhieu.Text;
                string MaCongTrinhDuAn = cbbCongTrinhDuAn.SelectedValue.ToString();
                string NgayDuTru = dtipNgayYeuCau.Value.ToString("yyyy-MM-dd");
                string TrangThai = cbbTrangThai.SelectedValue.ToString();

                string MaDonViTinh = "";
                string strSoLuong="";
                double SoLuong = 0;
                string sql = "";

                if (MaPhieuDuTru == "")
                {
                    cn.Insert_Table("tbl_PhieuDuTru", "SoPhieu,NgayDuTru,MaCongTrinhDuAn,TrangThai", "'" + SoPhieu + "','" + NgayDuTru + "','" + MaCongTrinhDuAn + "','" + TrangThai + "'");
                    foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
                    {
                        if (dgvr.IsNewRow) continue;

                        if (dgvr.Cells["SoLuong"].Value.ToString().Contains(','))
                        {
                            strSoLuong = dgvr.Cells["SoLuong"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strSoLuong = dgvr.Cells["SoLuong"].Value.ToString();
                        }
                        double.TryParse(strSoLuong, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuong);

                        sql = "select MaDonViTinh from tbl_VatTu where MaVatTu='"+dgvr.Cells["VatTu"].Value.ToString()+"'";
                        DataTable dt = cn.getTable(sql);
                        if (dt.Rows.Count > 0)
                        {
                            MaDonViTinh = dt.Rows[0]["MaDonViTinh"].ToString();
                        }

                        cn.Insert_Table("tbl_ChiTietPhieuDuTru", "SoPhieu,MaVatTu,MaDonViTinh,SoLuong", "'" + SoPhieu + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','"+MaDonViTinh+"','" + SoLuong.ToString().Replace(",",".") + "'");
                    }
                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Thêm phiếu dự trù vật tư.");
                }
                else
                {
                    cn.Update_Table("tbl_PhieuDuTru", "NgayDuTru='" + NgayDuTru + "',MaCongTrinhDuAn='" + MaCongTrinhDuAn + "',TrangThai='" + TrangThai + "'", "SoPhieu='" + SoPhieu + "'");

                    cn.Delete_Table("tbl_ChiTietPhieuDuTru", "SoPhieu ='" + SoPhieu + "'");

                    foreach (DataGridViewRow dgvr in dtgChiTiet.Rows)
                    {
                        if (dgvr.IsNewRow) continue;

                        if (dgvr.Cells["SoLuong"].Value.ToString().Contains(','))
                        {
                            strSoLuong = dgvr.Cells["SoLuong"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strSoLuong = dgvr.Cells["SoLuong"].Value.ToString();
                        }
                        double.TryParse(strSoLuong, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuong);

                        sql = "select MaDonViTinh from tbl_VatTu where MaVatTu='" + dgvr.Cells["VatTu"].Value.ToString() + "'";
                        DataTable dt = cn.getTable(sql);
                        if (dt.Rows.Count > 0)
                        {
                            MaDonViTinh = dt.Rows[0]["MaDonViTinh"].ToString();
                        }

                        cn.Insert_Table("tbl_ChiTietPhieuDuTru", "SoPhieu,MaVatTu,MaDonViTinh,SoLuong", "'" + SoPhieu + "','" + dgvr.Cells["VatTu"].Value.ToString() + "','" + MaDonViTinh + "','" + SoLuong.ToString().Replace(",",".") + "'");
                    }
                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Sửa phiếu dự trù vật tư.");
                }
                this.Close();
            }
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            if (dtgChiTiet.RowCount == 0) return;
            else
            {
                DialogResult msg = MessageBox.Show("Bạn có chắc muốn nhập lại dữ liệu?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (msg == DialogResult.Yes)
                {
                    dtgChiTiet.Rows.Clear();
                }
            }
        }

        private void btnXoaChon_Click(object sender, EventArgs e)
        {
            if (dtgChiTiet.Rows.Count > 1)
            {
                for (int i = dtgChiTiet.Rows.Count - 1; i >= 0; i--)
                {
                    if ((bool)dtgChiTiet.Rows[i].Cells[0].FormattedValue)
                    {
                        dtgChiTiet.Rows.RemoveAt(i);
                    }
                }
            }
        }
    }
}
